package _99练习;

import java.util.*;

public class CollectrionExercise {

	public static void main(String[] args) {
		
		
		// 一、 Collection练习
		// 1. 
		// 将一些汽车品牌的名字放入一个容器
		// 将一些汽车品牌的名字放入第二个容器
		// 容器1移除某个汽车品牌
		// 显示容器1中汽车品牌的数量
		// 判断容器1中是否含有 奥迪
		// 得到两个容器的交集
		// 判断容器2中是否空
		// 清空容器2
		// 判断容器2中是否空
		
		// 2.
		// 定义多个容器
		// 随机10个(1~20)数放入容器1
		// 随机10个(1~30)数放入容器2
		// 将容器1和容器2中所有内容放入容器3
		// 将容器1和容器2中的交集放入容器4(不改变容器1和容器2)
		// 打印4个容器中的内容
		
		
		// 二、 迭代器练习
		// 3. 
		// 使用迭代器 遍历显示练习1的容器
		// 使用迭代器 删除练习1容器中的奥迪
		
		// 使用加强型for 遍历显示练习1中的容器
		
		// 4. 定义一个员工类Employee
		// 创建一个容器存入以下信息
		// 1001 乔布斯 销售部
		// 1002 盖茨 工程部
		// 1003 赵云 客服部
		// 使用迭代器 1001编号的员工
		
		
		// 三 List练习
		// 5. 创建两个List容器对象l1 l2
		// l1 添加 "A" "B" "C" 三个元素
		// l2 添加 "D" "E" "F" "Egg" "Eee"
		// 将l2的中的所有元素加入到l1中
		// 修改
		// 	将l1中索引为2位置的改为"Z"
		// 显示、获取
		// 	打印显示l1 l2的大小
		// 	显示l1中下标为1的元素
		// 删除
		// 	将l1中索引为1的对象删除
		// 	将l1中第一个内容为"B"的对象删除
		
		
		
		// 四 Set练习
		
		// 6. 让用户输入10个不同数字放入Set容器，直到这个Set容器中有10个不同的数字
		
		// 7. 定义一个员工类	(Employee 员工编号 姓名 工资)
		// 7.1 将3个员工放入一个HashSet容器（使用Eclipse生成 equals hashcde 只判断工号) 
		// 7.2 将3个员工放入一个TreeSet容器 (Employee需要实现Comparable接口,根据工号排序)
		
		
		// (Map练习)
		// 8 
		// 8.1
		// 将以下信息放入Map容器
		// 书的编号    书名
		// ISBN-001 iOS开发从入门到窒息
		// ISBN-002 Python从入门到出家
		// ISBN-003 Eclipse从安装的到卸载
		// 8.2
		// 将以下信息放入Map容器 (需要将书的信息封装到书类的对象中)
		// 书的编号    书名					价格
		// ISBN-001 iOS开发从入门到窒息		17.5
		// ISBN-002 Python从入门到出家		30
		// ISBN-003 Eclipse从安装的到卸载	45
		
		// * 9. (Map练习)
//		 String str = "adfasdfer23cvt323446dfs23423sdfadhdsfg";		
//		char c = str.charAt(0);
		// 一个包含英文字母及数字的长字符串，可以随便敲写字母
		// 统计字符串中字母及数字出现的次数，使用map保存
		// 打印并显示结果(输出时按照字母顺序输出)
		// 如下:
		// a 2个
		// b 9个
		String str = "adfasdfer23cvt323446dfs23423sdfadhdsfg";	
		Map<Character,Integer> m = new TreeMap<>();
		for(int i=0;i<str.length();i++)
		{
			// 得到字符
			char c = str.charAt(i);
			// 判断当前容器是否已有
			if(m.get(c)==null)
			{
				// 放入容器
				m.put(c, 1);
			}
			else
			{
				// 数值+1
				m.put(c, m.get(c)+1);
			}
		}
		for(Character c:m.keySet())
		{
			System.out.println(c+" "+m.get(c)+"个");
		}
		
		
		// Queue Deque练习
		// 10. 编写一个银行取号叫号系统BankServiceSystem
		// 类中需要: 
			// 定义一个队列保存排队的号码，
			// 需要定义一个变量保存下一个取的号码是多少
			// 
		// 提供一个方法 用户取号 getNum() 
			// 调用该方法 显示: 顾客取号，号码为:XX,前面还有几位顾客在等待
			// 				（下一个号码放入队列，下一个号码+1）
		// 提供一个方法 窗口叫号 callNum()
			// 调用该方法 显示: 窗口叫号,请编号为xx的顾客到窗口办理业务
						// 窗口叫号,当前没有排队的顾客
						// 	（判断当前队列是否为空，如果空则打印没有顾客，有则将队首出队列）
		// 用以下代码测试:
		// BankServiceSystem b = new BankServiceSystem();
		// b.getNum();
		// b.getNum();
		// b.getNum();
		// b.getNum();
		// b.callNum()
		// b.callNum()
		// b.callNum()
		// b.callNum()
		// b.callNum()
		// b.callNum()


		
		// 栈结构练习

		// 11 
		// 1. 小明往一个竹筒形状的容器里装了20个有编号(1-20的)球,一端开口一端封闭
		// 2. 然后取出3个球,	pop
		// 3. 然后随机从已倒出的所有球中随机拿一个放回去	push
		// 4 循环执行2,3直到竹筒中全部倒出,倒空了就不塞回去了
		// 打印过程中的状况(取出的 竹筒中剩余的)
		
		
		// Collections练习
		// 12
		// 定义学生类Student 
		// 学号 姓名 语文 数学 外语
		// 1001  张三  100 95 76
		// 1002  李四  95  76 88
		// 1003  王五  79 88  75
		// 1004  赵六  95  60  83
		
		// 创建一个集合容器存放血神数据
		// 1. 使用Collections工具类想集合容器中添加多个学生
		// 2. 打乱顺序，打印输出
		// 3. 排序，根据学生的总成绩，从高到低排序，打印输出
		
		
	}

}